{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<img src=\"https://dl.dropboxusercontent.com/u/1683635/store/relax.png\" alt=\"\" align=\"right\"  style=\"height: 110px;\"/>\n",
      "\n",
      "# Using AnyBody from Python \n",
      "\n",
      "***\n",
      "\n",
      "The package **`anypytools`** has utilities and tools to work with the AnyBody Modeling System (AMS). This will allow us to do the follwing directly from python:\n",
      "\n",
      "+ Batch processing:  \n",
      "    Schedule the execution of many models in parallel. \n",
      "+ Parameter studies:   \n",
      "    Running the same model multiple times with different input and observe the response of an output variable.\n",
      "+ Perturbation studies:   \n",
      "    Finds the sensitivity of a set of output variables to small perturbations on a set of input variables. This is useful for calculating the Jacobian matrix in optimization studies.\n",
      "\n",
      "##### Requirements: Python and and AnyPyTools\n",
      "> [AnyPyTools](https://github.com/AnyBody-Research-Group/AnyPyTools) is a python library for working with the AnyBody Modeling System. An easy way to get started is to download the  Anaconda python distribution:\n",
      "> \n",
      "> - Download and install the [Anaconda python distribution](https://store.continuum.io/cshop/anaconda/)\n",
      "> \n",
      "> - After installation open the Anaconda command prompt and type:\n",
      ">\n",
      "> ``` cmd\n",
      "> conda install -c public anypytools\n",
      "> ```\n",
      "> \n",
      "> This should install the newest version of AnyPyTools. Try launching the inteactive version of this tutorial (in the Anaconda start menu) and start working with `anypytools`.\n"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "##Running macros\n",
      "***\n",
      "Let us see how to run a single model. In this tutorial we will use an example model [`Knee.any`](files/knee.any), which must be placed in the current working directory.\n",
      "\n",
      "The first step is to import the appropriate class for working with the console application and create an instance of the class ``AnyPyProcess``."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from anypytools.abcutils import AnyPyProcess \n",
      "app = AnyPyProcess()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now we define an _AnyScript_ macro which we want to run on the model. The macro is executed by starting the `start_macro` method of the `AnyPyProcess` class"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "macrolist = [['load \"Knee.any\"',\n",
      "              'operation Main.MyStudy.Kinematics',\n",
      "              'run',\n",
      "              'exit']]\n",
      "\n",
      "app.start_macro(macrolist);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  1 of 1 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \n",
        "Total run time: 3 seconds\n"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "#### Running multiple macros\n",
      "It is easy to run multiple macros by adding an extra set of macro commands to the macro list"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "macrolist = [['load \"Knee.any\"',\n",
      "              'operation Main.MyStudy.Kinematics',\n",
      "              'run',\n",
      "              'exit'],\n",
      "             ['load \"Knee.any\"',\n",
      "              'operation Main.MyStudy.InverseDynamics',\n",
      "              'run',\n",
      "              'exit']]\n",
      "app.start_macro(macrolist);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  2 of 2 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " (Total time: 4 seconds)\n"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Notice, that AnyPyProcess will run the anyscript macros in parallel. Modern computers have multiple cores, but a single AnyBody instance can only utilize a single core, leaving us with a great potential for speeding things up through penalization.\n",
      "\n",
      "To test this, let us create 10 macros in a for-loop. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "macrolist = []\n",
      "for i in range(15):\n",
      "    macrolist.append(['load \"Knee.any\"',              \n",
      "                      'operation Main.MyStudy.InverseDynamics',\n",
      "                      'run',\n",
      "                      'exit'] )"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 12
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "AnyPyProcess has a parameter 'num_processes' that controls the number parallel processes. Let us try a small example to see the difference in speed:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# First sequentially\n",
      "app = AnyPyProcess(num_processes = 1)\n",
      "app.start_macro(macrolist);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  15 of 15 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " (Total time: 60 seconds)\n"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "#Then with parallization\n",
      "app = AnyPyProcess(num_processes = 4)\n",
      "app.start_macro(macrolist);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  15 of 15 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " (Total time: 21 seconds)\n"
       ]
      }
     ],
     "prompt_number": 13
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Getting data from the AnyBody Model\n",
      "***\n",
      "If we are only interested in a few variables then\n",
      "In the following macro we have added a new classoperation to 'Dump' the result of the maximum muscle activity. The `start_macro` method will the return all the 'dump'ed variables:\n"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "macrolist = [['load \"Knee.any\"',\n",
      "              'operation Main.MyStudy.InverseDynamics',\n",
      "              'run',\n",
      "              'classoperation Main.MyStudy.Output.MaxMuscleActivity \"Dump\"',\n",
      "              'exit']] \n",
      "\n",
      "result = app.start_macro(macrolist)\n",
      "\n",
      "max_muscle_act = result[0]['Main.MyStudy.Output.MaxMuscleActivity']\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  1 of 1 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \n",
        "Total run time: 3 seconds\n"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "In order to make the plot we import the matplotlib library, and enable inline figurs "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%matplotlib inline\n",
      "import matplotlib.pyplot as plt\n",
      "import numpy as np\n",
      "\n",
      "plt.plot(max_muscle_act);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\ndH5vAAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x76ed080>"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "#### Getting output from many models\n",
      "Running multiple models is only interesting if the models are different. In the following, the length of the patella ligament is varied from one to 10cm using the \"Set Value\" classoperation macro."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "macrolist = []\n",
      "patella_ligament_lengths = np.linspace(0.01, 0.1, 9)\n",
      "for value in patella_ligament_lengths:\n",
      "    macrolist.append( ['load \"Knee.any\"',   \n",
      "                       'classoperation Main.MyModel.PatellaLigament.DriverPos \"Set Value\"\\\n",
      "                        --value={%f}'%(value),\n",
      "                       'operation Main.MyStudy.InverseDynamics',\n",
      "                       'run',\n",
      "                       'classoperation Main.MyStudy.Output.MaxMuscleActivity \"Dump\"',\n",
      "                       'exit'] )\n",
      "output = app.start_macro(macrolist)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  9 of 9 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \n",
        "Total run time: 11 seconds\n"
       ]
      }
     ],
     "prompt_number": 12
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We can now analyze the resulting maximum muscle activity by plotting the data in the `output` variable:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "for i, result in enumerate( output ):\n",
      "    maxact = result['Main.MyStudy.Output.MaxMuscleActivity']\n",
      "    plt.plot(maxact, label='%d cm'%(100*patella_ligament_lengths[i]) )\n",
      "\n",
      "plt.title('Effect of changing patella ligament length')    \n",
      "plt.xlabel('time steps')\n",
      "plt.ylabel('max muscle activity')\n",
      "plt.legend(bbox_to_anchor=(1.05, 1), loc=2);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7bfd6a0>"
       ]
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "#### Saving and loading all data with HDF5 files\n",
      "It can sometimes be convenient to save the entire model with all its data, although this can be several hundred megabytes. It is useful if we do not know which variables we are interested in before running the model. It can also be useful if we want to load the data in the GUI application and replay the result.\n",
      "\n",
      "The macro language allows us to save the output of a study to the HDF5 file format. To do this we add a \"Save data\" classoperation to the macro and then re-run the model:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "macrolist = [[\n",
      "  'load \"Knee.any\"',\n",
      "  'operation Main.MyStudy.Kinematics',\n",
      "  'run',\n",
      "  'classoperation Main.MyStudy.Output \"Save data\" --type=\"Deep\" --file=\"output.anydata.h5\"',\n",
      "  'exit']] \n",
      "app.start_macro(macrolist);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  1 of 1 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \n",
        "Total run time: 3 seconds\n"
       ]
      }
     ],
     "prompt_number": 16
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The data stored in the file **output.anydata.h5** can be re-loaded in the AnyBody GUI application. To do this; load the model, then right click the `Main.MyStudy.Output` folder and select \"Load data\". \n",
      "\n",
      "Moreover, since we set **`type=\"Deep\"`** in the macro we can also load the data into external programs, e.g. Matlab or python. In python this is done using the *`h5py`* module"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import h5py\n",
      "h5file = h5py.File('output.anydata.h5')\n",
      "data = np.array( h5file['/Output/MomentArm'] )\n",
      "h5file.close()\n",
      "print data"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "[ 0.05740825  0.05665018  0.05586448  0.05505892  0.05424032  0.05341468\n",
        "  0.05258717  0.05176219  0.05094339  0.05013373  0.04933551  0.04855041\n",
        "  0.04777948  0.04702321  0.04628154  0.04555385  0.04483899  0.0441353\n",
        "  0.04344059  0.04275212  0.04206663  0.04138032  0.04068878  0.03998705\n",
        "  0.03926952  0.03852994  0.03776138  0.03695617  0.03610588  0.03520129]\n"
       ]
      }
     ],
     "prompt_number": 19
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The data structure of the HDF5 files can unfortunately be very confusing. AnyBody does not save duplicate copies of the same data. If there are multiple references to the same folder, only one will be present in the HDF5 file. \n",
      "In our model `Knee.any` we have a reference to the **`Knee`** joint folder just before the **`Model`** folder in the study section. Thus, all variables inside the **`Knee`** folder cannot be accessed with the path '/Output/Model/Knee/...', but only through the path of the reference '/Output/kneeref/...'.\n",
      "\n",
      "We can see the problem in the following code snippet:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "with h5py.File('output.anydata.h5') as f:\n",
      "    print '/Output/Model/Knee/Pos' in f\n",
      "    print '/Output/kneeref/Pos' in f\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "False\n",
        "True\n"
       ]
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "This makes it difficult to find the correct path in large models with many references. AnyPyTools contains a wrapper for the h5py module, which automatically locates the right data, no matter what path is used. Using this module, we can easily locate the data. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import anypytools.h5py_wrapper as h5py2\n",
      "with h5py2.File('output.anydata.h5') as f:\n",
      "    print '/Output/Model/Knee/Pos' in f\n",
      "    print '/Output/kneeref/Pos' in f"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "True\n",
        "True\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The h5py wrapper will also let us use the AnyScript variable names directly so we don't have to replace every . (dot) with a / (slash), and remove the stuff before the Output folder. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "with h5py2.File('output.anydata.h5') as f:\n",
      "    kneeangle = np.array(f['Main.MyStudy.Output.Model.Knee.Pos'] )\n",
      "    momentarm = np.array(f['Output.MomentArm'] )\n",
      "    \n",
      "plt.plot(np.degrees(kneeangle),100*momentarm)\n",
      "plt.xlabel('Knee flexion (deg)')\n",
      "plt.ylabel('Moment arm (cm)');"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nRK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x77174e0>"
       ]
      }
     ],
     "prompt_number": 25
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "##Batch processing of many models\n",
      "******\n",
      "The approach to batch processing depends on the structure of the anybody model. The most commonly used strategy is a single anyscript main file which is loaded with different define statements to the trials, subjects or other parameters. This is the approach which is outlined on the [anyscript.org wiki page](http://wiki.anyscript.org/index.php/Running_several_files_as_batch), the first chapter of the tutorial explains how to handle this. \n",
      "\n",
      "Another strategy is to have a separate main file for each trial. These indivudual main files hold all trial specific data and includes a base model which is common to all trials and subjects. This is makes it much easier to work with mocap models which have many subject or hundres of trials. \n",
      "\n",
      "This [example model](https://dl.dropboxusercontent.com/u/1683635/store/BatchProcessExample.zip) illustrates the concept with the Arm2D demo from AnyBody. The main files are located in subfolders which load the base model \"Demo.Arm2D.any\" with different parameters. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%cd \"BatchProcessExample\"\n",
      "!dir /B"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "C:\\Users\\Morten\\Google Drive\\IPython Notebooks\\BatchProcessExample\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "batchprocess.py\n",
        "Demo.Arm2D.any\n",
        "model1\n",
        "model2\n",
        "model3\n",
        "model4\n",
        "model5\n",
        "model6\n",
        "model7\n",
        "model8\n",
        "model9\n",
        "Output\n",
        "RunExample.bat\n"
       ]
      }
     ],
     "prompt_number": 26
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from anypytools.abcutils import AnyPyProcess\n",
      "\n",
      "app = AnyPyProcess(num_processes = 3)\n",
      "macrolist = [['load \"main.any\"',\n",
      "           'operation Main.Study.InverseDynamics',\n",
      "\t\t   'run',\n",
      "\t\t   'exit']]\n",
      "\n",
      "app.start_macro(macrolist, search_subdirs= \"[model[1-9].*main.any\" );"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \r",
        "[****************100%******************]  9 of 9 complete"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \n",
        "Total run time: 13 seconds\n"
       ]
      }
     ],
     "prompt_number": 28
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "##Running external optimizers with AnyBody\n",
      "******\n",
      "To come\n",
      "\n"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# This just formats the Notebook so it looks a bit nicer\n",
      "from IPython.core.display import HTML\n",
      "def css_styling():\n",
      "    styles = open(\"custom.css\", \"r\").read()\n",
      "    return HTML(styles)\n",
      "css_styling()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<style>\n",
        "    @font-face {\n",
        "        font-family: \"Computer Modern\";\n",
        "        src: url('http://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf');\n",
        "    }\n",
        "    div.cell{\n",
        "        width:800px;\n",
        "        margin-left:auto;\n",
        "        margin-right:auto;\n",
        "    }\n",
        "    h1 {\n",
        "        font-family: Helvetica, serif;\n",
        "    }\n",
        "    h2 {\n",
        "        margin-top:12px;\n",
        "        margin-bottom: 0px;\n",
        "    }\n",
        "    h3 {\n",
        "        margin-top:12px;\n",
        "        margin-bottom: 0px;\n",
        "    }\n",
        "    h4{\n",
        "        margin-top:12px;\n",
        "        margin-bottom: 0px;\n",
        "       }\n",
        "    code.language-cmd{\n",
        "        line-height: 100%;\n",
        "        font-size: 90%;\n",
        "    }\n",
        "    div.text_cell_render{\n",
        "        font-family: Computer Modern, \"Helvetica Neue\", Arial, Helvetica, Geneva, sans-serif;\n",
        "        line-height: 145%;\n",
        "        font-size: 120%;\n",
        "        width:800px;\n",
        "        margin-left:auto;\n",
        "        margin-right:auto;\n",
        "    }\n",
        "    .CodeMirror{\n",
        "            font-family: \"Source Code Pro\", source-code-pro,Consolas, monospace;\n",
        "    }\n",
        "    .prompt{\n",
        "        display: None;\n",
        "    }\n",
        "    .text_cell_render h5 {\n",
        "        font-weight: 300;\n",
        "        font-size: 12pt;\n",
        "        #color: #4057A1;\n",
        "        font-style: italic;\n",
        "        margin-bottom: .5em;\n",
        "        margin-top: 0.5em;\n",
        "        display: block;\n",
        "    }\n",
        "    \n",
        "    .warning{\n",
        "        color: rgb( 240, 20, 20 )\n",
        "        }\n",
        "       \n",
        "</style>\n",
        "<script>\n",
        "    MathJax.Hub.Config({\n",
        "                        TeX: {\n",
        "                           extensions: [\"AMSmath.js\"]\n",
        "                           },\n",
        "                tex2jax: {\n",
        "                    inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
        "                    displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
        "                },\n",
        "                displayAlign: 'center', // Change this to 'center' to center equations.\n",
        "                \"HTML-CSS\": {\n",
        "                    styles: {'.MathJax_Display': {\"margin\": 4}}\n",
        "                }\n",
        "        });\n",
        "</script>"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 106,
       "text": [
        "<IPython.core.display.HTML at 0x583c518>"
       ]
      }
     ],
     "prompt_number": 106
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}